package com.sun.jdk8.parallel;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.stream.LongStream;

/**
 * 通过案例我们可以看到parallelStream的效率是最高的。
 * Stream并行处理的过程会分而治之，也就是将一个大的任务切分成了多个小任务，这表示每个任务都是
 * 一个线程操作。
 */
public class SerialComparatorParallel {
    
    private static long NUMBERS = 500000000;
    
    private long start;
    
    @Before
    public void before(){
        start = System.currentTimeMillis();
    }
    
    @After
    public void after(){
        long end = System.currentTimeMillis();
        System.out.println("消耗时间："+(end-start));
    }

    /**
     * 普通for循环 消耗时间：212
     */
    @Test
    public void test01(){
        System.out.println("普通for循环:");
        long res = 0;
        for (int i = 0; i < NUMBERS; i++) {
            res += i;
        }
    }

    /**
     * 串行流处理
     * 消耗时间：286
     */
    @Test
    public void test02(){
        System.out.println("串行流：serialStream");
        LongStream.rangeClosed(0,NUMBERS)
                .reduce(0,Long::sum);
    }

    /**
     * 并行流处理 消耗时间：121
     */
    @Test
    public void test03(){
        System.out.println("并行流：parallelStream");
        LongStream.rangeClosed(0,NUMBERS)
                .parallel()
                .reduce(0,Long::sum);
    }
}
